inspector: handle differences in DPI between backends
authorChristian Hergert <chergert@redhat.com>
Tue, 17 Nov 2020 18:45:25 +0000 (10:45 -0800)
committerChristian Hergert <chergert@redhat.com>
Tue, 17 Nov 2020 18:45:25 +0000 (10:45 -0800)
This fixes an issue on macOS where the text gets much larger once opening
the inspector.

gtk/inspector/visual.c

index fd082112e24663d729d32da442add1c1f37d02da..f3cb4695ac878489ec5006e9419c52c3507e9ba3 100644 (file)
@@ -52,6 +52,9 @@
 #ifdef GDK_WINDOWING_WAYLAND
 #include "wayland/gdkwayland.h"
 #endif
+#ifdef GDK_WINDOWING_MACOS
+#include "macos/gdkmacos.h"
+#endif
 
 #include "gdk/gdk-private.h"
 
@@ -173,34 +176,27 @@ redraw_everything (void)
 }
 
 static double
-get_font_scale (GtkInspectorVisual *vis)
+get_dpi_ratio (GtkInspectorVisual *vis)
 {
-#ifdef GDK_WINDOWING_X11
-  if (GDK_IS_X11_DISPLAY (vis->display))
-    {
-      int dpi_int;
-
-      g_object_get (gtk_settings_get_for_display (vis->display),
-                    "gtk-xft-dpi", &dpi_int,
-                    NULL);
-
-      return dpi_int / (96.0 * 1024.0);
-    }
+#ifdef GDK_WINDOWING_MACOS
+  if (GDK_IS_MACOS_DISPLAY (vis->display))
+    return 72.0 * 1024.0;
 #endif
-#ifdef GDK_WINDOWING_WAYLAND
-  if (GDK_IS_WAYLAND_DISPLAY (vis->display))
-    {
-      int dpi_int;
 
-      g_object_get (gtk_settings_get_for_display (vis->display),
-                    "gtk-xft-dpi", &dpi_int,
-                    NULL);
+  return 96.0 * 1024.0;
+}
 
-      return dpi_int / (96.0 * 1024.0);
-    }
-#endif
+static double
+get_font_scale (GtkInspectorVisual *vis)
+{
+  double ratio = get_dpi_ratio (vis);
+  int dpi_int;
+
+  g_object_get (gtk_settings_get_for_display (vis->display),
+                "gtk-xft-dpi", &dpi_int,
+                NULL);
 
-  return 1.0;
+  return dpi_int / ratio;
 }
 
 static void
@@ -209,8 +205,10 @@ update_font_scale (GtkInspectorVisual *vis,
                    gboolean            update_adjustment,
                    gboolean            update_entry)
 {
+  double ratio = get_dpi_ratio (vis);
+
   g_object_set (gtk_settings_get_for_display (vis->display),
-                "gtk-xft-dpi", (int)(factor * 96 * 1024),
+                "gtk-xft-dpi", (int)(factor * ratio),
                 NULL);
 
   if (update_adjustment)